From 611788fb5305eff18d6e66eab800af304a84bfc7 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 3 Mar 2023 08:44:29 -0500 Subject: [PATCH] stack: Don't recreate at contexts in dispose This is the same protection we have in GtkWidgetAccessible. --- gtk/gtkstack.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/gtk/gtkstack.c b/gtk/gtkstack.c index 0975ecf472..59a3a0357b 100644 --- a/gtk/gtkstack.c +++ b/gtk/gtkstack.c @@ -219,6 +219,7 @@ struct _GtkStackPage guint needs_attention : 1; guint visible : 1; guint use_underline : 1; + guint in_destruction : 1; }; typedef struct _GtkStackPageClass GtkStackPageClass; @@ -235,6 +236,14 @@ gtk_stack_page_accessible_get_at_context (GtkAccessible *accessible) { GtkStackPage *page = GTK_STACK_PAGE (accessible); + if (page->in_destruction) + { + GTK_DEBUG (A11Y, "ATContext for “%s” [%p] accessed during destruction", + G_OBJECT_TYPE_NAME (accessible), + accessible); + return NULL; + } + if (page->at_context == NULL) { GtkAccessibleRole role = GTK_ACCESSIBLE_ROLE_TAB_PANEL; @@ -353,6 +362,8 @@ gtk_stack_page_dispose (GObject *object) { GtkStackPage *page = GTK_STACK_PAGE (object); + page->in_destruction = TRUE; + g_clear_object (&page->at_context); G_OBJECT_CLASS (gtk_stack_page_parent_class)->dispose (object); -- 2.30.2